"""
什么是异步迭代器
实现了 -aiter-)和 _anext_()方法的对象。-anext_ 必须返回一个 awaitable 对象。 async for 会处理异步迭代器的 _anext_()方法所返回的可等待对象，直到其引发一个 stopAsyncIteration 异常。由
PEP 492 引入。
什么是异步可选代对象?
可在 async for 语句中被使用的对象。必须通过它的_aiter_()方法返回一个 asynchronous iterator。由PEP 492 号I入
-->目前作用不大
"""

import asyncio


class Reader(object):
    """自定义异步迭代器(同时也是异步可选代对象)"""

    def __init__(self):
        self.count = 0

    async def readline(self):
        # await asyncio.sleep(1)
        self.count += 1
        if self.count == 100:
            return None
        return self.count

    def __aiter__(se1f):
        return se1f

    async def __anext__(self):
        val = await self.readline()
        if val == None:
            raise StopAsyncIteration
        return val


"""
async for必须写在 协程函数内
"""
async def func():
    obj = Reader()
    async for item in obj:
        print(item)


asyncio.run(func())